/** Mostrar estadisticas de las conexiones TCP y UDP **/

package clientegestionred;

import common.Consulta;
import common.Cons;
import common.SesionSNMP;

import java.io.IOException;

import org.snmp4j.smi.*;


public class InfoTransporte implements Cons{

    private SesionSNMP sesion; //sesion SNMP

    private Variable [] response=new Variable []{}; //objeto que almacena las
                                                    //respuestas de consulta

    /* Constructor */
    public InfoTransporte(SesionSNMP sesion) {
        this.sesion = sesion;
    }

    /* Metodo principal que arranca la ejecucion */
    public void start() throws IOException{

        Consulta consulta = new Consulta(sesion);
        imprimeTCP(consulta);
        imprimeUDP(consulta);

    } //start


    /* Muestra la informacion de UDP */
    private void imprimeUDP(Consulta consulta) throws IOException{

        System.out.println("UDP");
        System.out.flush();
        OID[] oids = new OID[]{udpInDatagrams, udpNoPorts, udpOutDatagrams};
        response = consulta.get(oids);

         System.out.println("\t Número de Datagramas recibidos: "
                 +response[0].toString());
         System.out.println("\t Número de Datagramas enviados: "
                 +response[2].toString());
         System.out.println("\t Número de Datagramas recibidos sin aplicación "+
                 "en el puerto destino: "+response[1].toString());


    } //imprimeUDP

    /* Muestra la informacion de TCP */
    private void imprimeTCP(Consulta consulta) throws IOException{
        System.out.println("\nInformación sobre los protocolos de transporte");
        System.out.println("TCP");
        System.out.flush();
        OID[] oids = new OID[]{tcpRtoMin, tcpRtoMax, tcpInSegs, tcpOutSegs,
        tcpRetransSegs};
        response = consulta.get(oids);
        String In = response[2].toString();
        String Out = response[3].toString();
        String Retrans = response[4].toString();

         System.out.println("\t Tiempo mínimo de respuesta "+response[0].toString()+
                 "(ms)");
         System.out.println("\t Tiempo máximo de respuesta "+response[1].toString()+
                 "(ms)");
         System.out.println("\t Información total recibida: "+miraByte(In));
         System.out.println("\t Información total enviada: "+miraByte(Out));
         System.out.println("\t Información que fue retransmitida: "+
                 miraByte(Retrans));


    } //imprimeTCP

    /* Pone la unidad correcta de bytes */
    private String miraByte(String bytes){
        int n = Integer.parseInt(bytes);
        if(n < 1024)
        {
            String resultado = n+ " bytes";
            return resultado;
        }
        else{
            if(n< 1048576)
            {
                double h= (double)n/1024;
                String resultado = h+ " Kbytes";
                return resultado;
            }
                double h = (double)n/1048576;
                String resultado = h+ " Mbytes";
                return resultado;
        }

    }//miraByte

}//InfoTransporte